前面的型態的章節,我們大概簡單的學過了 Go 語言的基本型態,除了那些基本的型態之外,Go 語言還有其它種內建的型態包括陣列、切片、Map。我們分三個章節來探討它。
陣列
首先我們先介紹陣列,
如何宣告陣列呢?很簡單!只要在變數宣告後面多家 [] 就可以了,裡面要填寫宣告的陣列數字。
var x [5]int
下面是完整的範例
package main
import "fmt"
func main() {
var x [5]int
x[4] = 100
fmt.Println(x)
}
這邊來稍微說明一下
x[4] = 100
這一行的意思是說「x 的第五個元素賦予值 100」,之所以是第五個元素是因為,我們一開始用 var x [5]int 宣告了五個元素的陣列,而陣列的起始元素是第 0 個,從頭開始算 0, 1, 2, 3, 4 五個元素,所以 x[4] 表示的是第五個元素,如果要選擇第 0 個元素要寫 x[0]。
接下來稍微看一個進階的例子來討論一下:
func main() {
var x [4]float64
x[0] = 23
x[1] = 45
x[2] = 33
x[3] = 21
var total float64 = 0
for i := 0; i < 4; i++ {
total += x<i>
}
fmt.Println(total / 4)
}</i>
這邊一樣是宣告五個元素的陣列,x[0] ~ x[4] 的部分是初始化數值的動作,後面 for 迴圈是走訪所有個元素並且加到 total 這個變數中,最後在 Println 的部分再除以 4 計算平均。雖然這個程式沒有問題,但是沒有彈性,如果我今天加入六個元素、七個元素,你就必須要更改三個地方(宣告、for 迴圈、fmt.Println),所以我們稍微將它更改一下:
var total float64 = 0
for i := 0; i <len(x); i++ {
total += x[i]
}
fmt.Println(total / len(x))
我們利用內建的函式 len() 來計算陣列的數量,這樣子如果元素有修改,我們就只需要修改一個部分就可以了,剩下的 len() 會自己去計算陣列的數量。但是!!!這個程式執行會有問題,如果你執行程式碼會看到錯誤
invalid operation: total / 4 (mismatched types float64 and int)
這是因為 total 變數和 len() 計算完成後的型態不同,一個是 float64 另一個則是 int,所以發生錯誤,你必須要讓它強制轉型才可以執行。
fmt.Println(total / float64(len(x)))
另外 for 迴圈有另外一種內建的寫法可以走訪每個陣列,就是利用 range ,但是他預設會有兩個回傳值,一個是鍵一個是值。
var total float64 = 0
for i, value := range x {
total += value
}
fmt.Println(total / float64(len(x)))
這個程式乍看之下沒有問題,但是我們都知道 Go 沒有使用的函式、變數,被 compile 看到連編譯都不給編,會出現「i declared and not used」錯誤,但是這邊我們真的不需要「 i 」這個鍵怎麼辦?我們可以利用「 _ 」這個佔位符來取代。
var total float64 = 0
for _, value := range x {
total += value
}
fmt.Println(total / float64(len(x)))
讓我們來稍微檢視一下最後修改的版本
func main() {
var x [4]float64
x[0] = 23
x[1] = 45
x[2] = 33
x[3] = 21
var total float64 = 0
for _, value := range x {
total += value
}
fmt.Println(total / float64(len(x)))
}
看起十分的精簡又方便維護!但是就只有這樣了嗎?我個人覺得初始化的部份還是太長了,就讓我們來簡化它!
x := [4]float64{23, 45, 33, 21}
很短對不對!不過它很不方便閱讀,所以你也可以改成:
x := [4]float64{
23,
45,
33,
21,
}
注意最後一個逗點要留著喔!不然編譯會出錯,你不要覺得這個逗點很奇怪,一切都是有原因的,原因就在於方便維護!!!
x := [3]float64{
23,
45,
33,
// 21,
}
http://play.golang.org/p/pmN_0o63Hl
有沒有!!!只要註解掉就可以了,超方便的,不用像其他語言再修正什麼逗號了。
本文章部份內容修改自 [i]CC3.0 授權的 An Introduction to Programming in Go
你好,
你的範例是乎有點出錯
func main() {
var x [4]float64
x[0] = 23
x[1] = 45
x[2] = 33
x[3] = 21
var total float64 = 0
for i := 0; i < 4; i++ {
total += x<i>
}
fmt.Println(total / 4)
}
多了 &
應該是他的文字編輯器自己跑掉了
https://play.golang.org/p/6XObVkP8Bak
total += x
寫錯了
要改成 x[i]